<?php

declare(strict_types=1);

namespace Modules\DataCheck\Models;

use Catch\Base\CatchModel as Model;
use Illuminate\Database\Eloquent\Relations\HasMany;
use Modules\Permissions\Models\Traits\DataRange;
use Modules\DataCheck\Enums\TaskSourceFileEnum;

/**
 * 数据核对任务源文件模型
 * 
 * @property int $id 主键ID
 * @property string $file_name 文件名
 * @property string $file_path 文件路径
 * @property int $file_state 文件状态
 * @property string|null $remark 备注
 * @property int $created_user_id 创建用户ID
 * @property int $created_at 创建时间
 * @property int $updated_at 更新时间
 * @property int|null $deleted_user_id 删除用户ID
 * @property int|null $deleted_at 软删除时间
 */
class DcTaskSourceFile extends Model
{
    use DataRange;
    /** 表名 */
    protected $table = 'dc_task_source_file';

    /** 允许填充字段 */
    protected $fillable = [
        'id',
        'file_name',
        'file_path',
        'file_state',
        'remark',
        'created_user_id',
        'created_at',
        'updated_at',
        'deleted_user_id',
        'deleted_at',
        'last_used_time',
    ];

    /** 类型转换 */
    protected $casts = [
        'file_state' => 'integer',
        'created_user_id' => 'integer',
        'created_at' => 'datetime',
        'updated_at' => 'datetime',
        'deleted_user_id' => 'integer',
        'deleted_at' => 'datetime',
        'last_used_time' => 'datetime',
    ];

    /**
     * 追加到模型数组表单的访问器
     */
    protected $appends = ['file_state_name'];

    /**
     * 关联任务表 - 一个源文件可以对应多个任务
     */
    public function tasks(): HasMany
    {
        return $this->hasMany(DcTask::class, 'source_file_id', 'id');
    }

    /**
     * 获取文件状态名称
     */
    public function getFileStateNameAttribute(): string
    {
        try {
            $enum = TaskSourceFileEnum::from($this->file_state);
            return $enum->message();
        } catch (\ValueError $e) {
            return '未知状态';
        }
    }
}
